package com.aididi.designpatter;


/**
 * @Auther: xuzexiang
 * @Date: 2018-10-29 0029 10:56
 * @Description:    迭代器模式       迭代器模式属于行为型模式
 * 迭代器模式（Iterator Pattern）是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素，不需要知道集合对象的底层表示
 * 何时使用：遍历一个聚合对象
 * 如何解决：把在元素之间游走的责任交给迭代器，而不是聚合对象
 * 使用场景： 1、访问一个聚合对象的内容而无须暴露它的内部表示。
 *          2、需要为聚合对象提供多种遍历方式。
 *          3、为遍历不同的聚合结构提供一个统一的接口
 */
public class IteratorDemo {
    public static void main(String[] args) {
        NameRepository nameRepository = new NameRepository();
        for (Iterator it = nameRepository.getIterator();it.hasNext();){
            String name = (String) it.next();
            System.out.println(name);
        }
    }
}

/**
 * 1.创建接口
 */
interface Iterator{
    public boolean hasNext();
    public Object next();
}

interface Container {
    public Iterator getIterator();
}

/**
 *创建实现了 Container 接口的实体类。该类有实现了 Iterator 接口的内部类 NameIterator
 */
class NameRepository implements Container{
    public String names[] = {"Robert" , "John" ,"Julie" , "Lora"};

    @Override
    public Iterator getIterator() {
        return new NameIterator();
    }
    private class NameIterator implements Iterator{
        int index;
        @Override
        public boolean hasNext() {
            if(names.length>index){
                return true;
            }
            return false;
        }

        @Override
        public Object next() {
            if(this.hasNext()){
                return names[index++];
            }
            return null;
        }
    }
}